/**
 * @param {number} amount
 * @param {number[]} coins
 * @return {number}
 * 给你一个整数数组 coins 表示不同面额的硬币，另给一个整数 amount 表示总金额。

请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额，返回 0 。

假设每一种面额的硬币有无限个。 

题目数据保证结果符合 32 位带符号整数。
和爬楼梯问题一下，  排列组合问题，主要排列要区分顺序，需遍历整个数组，去加步数
组合，就是遍历 硬币面值，在遍历 数组
result 的下标，表示是 总和  ，值代表有多少种方案
 */
var change = function(amount, coins) {
    const resulet = new Array(amount + 1).fill(0)
    resulet[0] = 1
    for ( const coin of coins) {
        for (let i= coin;i <= amount; i++) {
            resulet[i] += resulet[i-coin]
        }
    }
    return resulet[amount]
};